﻿using System;
using System.Collections.Generic;
using System.Text;

namespace DrDimsLib.CoreSDK.CLRExtension
{
    public static class TimeExtension
    {
        /// <summary>
        /// 基姆拉尔森计算公式
        /// W = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) % 7
        /// </summary>
        /// <param name="AnyDTime"> 扩展 - 忽略 </param>
        /// <param name="y"> 表示日期中的日数 </param>
        /// <param name="m"> m表示月份数 </param>
        /// <param name="d"> y表示年数 </param>
        /// <returns> 星期`日` </returns>
        public static string ChineseExpress(this DateTime AnyDTime)
        {
            int y, m, d;
            y = AnyDTime.Year; m = AnyDTime.Month; d = AnyDTime.Day;
            /* 
            * 注意：在公式中有个与其他公式不同的地方：
            * 把一月和二月看成是上一年的十三月和十四月，
            * 例：如果是2004 - 1 - 10则换算成：2003 - 13 - 10来代入公式计算
            */
            if (m == 1 || m == 2)
            {
                y--; m += 12;
            }
            int index = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
            string[] constData = { "一", "二", "三", "四", "五", "六", "日" };
            return constData[index].ToString();
        }
        /// <summary>
        /// 转化Unix时间戳为可识别自然语言
        /// </summary>
        /// <param name="dt"> MS 标准DateTime </param>
        /// <returns> 自然语言表达 </returns>
        public static string ToDTExpress(this DateTime dt, int pX = 0)
        {
            string token = ".";
            // part0 `2017.03.15`
            var p1Date = dt.ToString("yyyy-MM-dd");
            // part1 `周一`
            var p2Chinese = string.Format("(周{0})", dt.ChineseExpress());
            // par2 `am 上午`
            var p3Time = string.Format("{0:tt hh:mm:ss}", dt);
            p3Time = p3Time.Replace("am", "上午").Replace("pm", "下午");
            // 返回 p1 or p2
            if (pX == 1) return p1Date + token + p2Chinese;
            if (pX == 2) return p3Time;
            // 返回整体字符串
            string dateTime = string.Empty;
            // 合成 并过滤返回
            if (pX == 0)
            {
                dateTime = string.Join<string>(token, new string[] { p1Date, p2Chinese, p3Time });
            }
            return dateTime;
        }
    }
}
